package br.com.sgpv2.entity.cargos;

import java.io.Serializable;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Transient;

import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.LazyCollection;
import org.hibernate.annotations.LazyCollectionOption;

import br.com.sgpv2.entity.organograma.Entidade;
import br.com.sgpv2.entity.organograma.Nivel;

@Entity
@Table(name = "caf_cargo_funcao")
@SequenceGenerator(name = "sequenceCargoFuncao", sequenceName = "caf_cargo_funcao_caf_id_seq")	
public class CargoFuncao implements Serializable{
	
	
	private static final long serialVersionUID = 1L;
	private int id;
	private String codigo;
	private String descricao;
	private Entidade entidade;
	private String entidadeTransiente;
	private List<Nivel> niveis;

	/**
	 * Recupera o valor do ID da entidade.
	 */
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name = "caf_id", nullable = false)
	public int getId() {
		return id;
	}
	
	/**
	 * Configura o valor do ID da entidade.
	 */
	public void setId(int id) {
		this.id = id;
	}
	
	/**
	 * Recupera o valor do codigo da Entidade.
	 */
	@Column(name="caf_codigo", nullable = false)
	public String getCodigo() {
		return codigo;
	}
	
	/**
	 * Configura o valor do ID da Entidade.
	 */
	public void setCodigo(String codigo) {
		this.codigo = codigo;
	}
	
	/**
	 * Recupera o valor da descricao da Entidade.
	 */
	@Column(name="caf_descricao", nullable = false)
	public String getDescricao() {
		return descricao;
	}
	
	/**
	 * Configura o valor da descricao da Entidade.
	 */
	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}
	
	/**
	 * Recupera o valor do ID da Entidade.
	 */
	@ManyToOne
	@JoinColumn(name = "ent_id", nullable = false)
	@LazyCollection(LazyCollectionOption.FALSE)
	public Entidade getEntidade() {
		return entidade;
	}
	
	/**
	 * Configura o valor do ID da Entidade.
	 */
	public void setEntidade(Entidade entidade) {
		this.entidade = entidade;
	}

	@Transient
	public String getEntidadeTransiente() {
		return entidadeTransiente;
	}

	public void setEntidadeTransiente(String entidadeTransiente) {
		this.entidadeTransiente = entidadeTransiente;
	}
	


	/**
	 * Recupera a lsita de níveis do cargo
	 */
	@OneToMany(mappedBy = "cargoFuncao")
	@LazyCollection(LazyCollectionOption.FALSE)
	@Cascade(value = { org.hibernate.annotations.CascadeType.REMOVE,
			org.hibernate.annotations.CascadeType.ALL ,org.hibernate.annotations.CascadeType.DELETE_ORPHAN})
	public List<Nivel> getNiveis() {
		return niveis;
	}

	/**
	 * Configura a lsita de níveis do cargo
	 */
	public void setNiveis(List<Nivel> niveis) {
		this.niveis = niveis;
	}
	

}
